package conf

import (
	"flag"
	"github.com/titanous/json5"
	"os"
	"path/filepath"
)

var Config = &config{}

var Dir = ""

func init() {
	//获取当前程序的路径
	dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
	if err != nil {
		panic(err)
	}
	Dir = dir
	LoadConfig()
}

func LoadConfig() {
	configFile := flag.String("config", "config.json5", "Path to the configuration file")
	//指定对应的json配置文件
	b, err := os.ReadFile(*configFile)
	if err != nil {
		panic(err)
	}
	err = json5.Unmarshal(b, Config)
	if err != nil {
		panic(err)
	}
}

type config struct {
	Ip         string      `json:"ip"`         //监听的ip
	Port       string      `json:"port"`       //监听的端口
	Namespaces []Namespace `json:"namespaces"` //命名空间
	Hot        bool        `json:"hot"`        //是否开启热更新
	Cors       cors        `json:"cors"`       //跨域配置
	Tls        tls         `json:"tls"`        //tls配置
	BasicAuth  basicAuth   `json:"basic_auth"` //basicAuth配置
}

type Namespace struct {
	Name string `json:"name"` //命名空间名称
	Docs []doc  `json:"docs"` //文档配置
}

type doc struct {
	DocName  string `json:"doc_name"`  //文档名称
	DocPath  string `json:"doc_path"`  //文档路径
	BasePath string `json:"base_path"` //基础URL
	Ip       string `json:"ip"`        //接口的IP
	Port     string `json:"port"`      //接口的端口
}

type cors struct {
	Enable  bool     `json:"enable"`  //是否开启跨域
	Origins []string `json:"origins"` //允许的域名
	Headers []string `json:"headers"` //允许的头
	Methods []string `json:"methods"` //允许的方法
}

type tls struct {
	Enable   bool   `json:"enable"`    //是否开启tls
	Auto     bool   `json:"auto"`      //是否自动获取证书
	Domain   string `json:"domain"`    //域名
	Email    string `json:"email"`     //邮箱
	CertFile string `json:"cert_file"` //证书文件
	KeyFile  string `json:"key_file"`  //密钥文件
}

type basicAuth struct {
	Enable   bool   `json:"enable"`   //是否开启basicAuth
	Username string `json:"username"` //用户名
	Password string `json:"password"` //密码
}
